The goal of this step in the workflow is to compare S2 streamflow height to air temperature data in order to quality check the streamflow data.
Install/load necessary R packages
Set working directory if necessary (or create a file path to use throughout the RMD to call the data from Box)
Read in data from CSVs, made in prior workflow steps, from the
intermediate_data directory
#read in necessary CSV files from prior RMDs
all_streamflow <- read_csv(here("intermediate_data", "all_streamflow.csv"))
air_temp_30_clean <- read_csv(here("intermediate_data", "air_temp_30_clean.csv"))
mc_clean <- read_csv(here("intermediate_data", "mc_clean.csv")) %>%
rename(datetime = collected)
precip_15_clean <- read_csv(here("intermediate_data", "precip_15_clean.csv"))
precip_6h_clean <- read_csv(here("intermediate_data", "precip_6h_clean.csv"))
precip_12h_clean <- read_csv(here("intermediate_data", "precip_12h_clean.csv"))
precip_daily_clean <- read_csv(here("intermediate_data", "precip_daily_clean.csv"))
precip_daily_join <- read_csv(here("intermediate_data", "precip_daily_join.csv"))
#set constants
min_year = 2017
max_year = 2021
#format precipitation data for plotting
precip_15_join <- precip_15_clean %>%
pivot_wider(
names_from = "precip_type",
values_from = "precip_in"
) %>%
subset(year >= min_year & year <= max_year) %>%
rename(precip_10_in = precip_10)
precip_daily_join <- precip_daily_join %>%
mutate(dummy = "b",
dummy = as.factor(dummy))
#format air temperature data for plotting
airtemp_join <- air_temp_30_clean %>%
pivot_wider(
names_from = "airtemp_type",
values_from = "airtempC"
) %>%
subset(year >= min_year & year <= max_year) %>%
mutate(freezing = as.factor(freezing),
dummy = "a")
#format air temp data for plotting
precip_air <- full_join(x = precip_15_join,
y = airtemp_join,
by = c("datetime", "year")) %>%
subset(year >= min_year & year <= max_year)
#join air and precipitation data
precip_air <- full_join(x = precip_15_join,
y = airtemp_join,
by = c("datetime", "year")) %>%
subset(year >= min_year & year <= max_year)
Plot
air temperature (ºC / 100) is plotted as a pink line, and
cumulative daily precipitation (in / 10) is plotted as grey bars.
#plot
p_daily <- ggplot() +
#airtemp data
geom_line(data = airtemp_join,
aes(x = datetime,
y = airtempc_100,
color = dummy,
group = 1,
#create hovering labels for interactive graph
text = paste0("DateTime: ", datetime, "\n",
"AirTemp (ºC/100): ", airtempc_100)
),
color = "pink",
alpha = 0.5,
size = 0.25) +
#precipitation data
geom_col(data = precip_daily_join,
aes(x = datetime,
y = precip_10_in,
colour = dummy,
group = 1,
text = paste0("Date: ", date, "\n",
"Daily Cumulative Precipitation (in/10): ", precip_10_in)),
size = 0.25,
color = I("grey")) +
theme_classic() +
labs(x = "Time",
y = " ",
#title = "S2 Daily Cumulative Precipitation \n and Air Temperature Every 30min",
subtitle = "Daily cumulative precipitation is plotted in grey. \n Air temperature is plotted in pink.") +
theme(plot.title = element_text(hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5,
size = 7))
#interactive plot
ggplotly(p_daily,
tooltip = "text") %>%
layout(title = list(text = paste0(paste0("S2 Daily Cumulative Precipitation \n and Air Temperature Every 30min (", min_year, "-", max_year, ")"),
'<br>',
'<sup>',
paste0("Daily cumulative precipitation is plotted in grey. \n Air temperature is plotted in pink."),
'</sup>')),
font = list(size = 12)
)
For interactive plots,
air temperature (ºC / 100) is plotted as a pink line,
streamflow (ft) is plotted as a blue line,
and streamflow manual checkpoints (ft) are plotted as black dots.
#calculate the ratio of the 2 y-axes to plot the variables together in the static plot
trans_value <- max(airtemp_join$airtempc_100, na.rm = TRUE) / max(all_streamflow$stream_height_ft, na.rm = TRUE)
#plot
p_air <- ggplot() +
#airtemp data
geom_line(data = airtemp_join,
aes(x = datetime,
y = airtempc_100,
group = 1,
#create hovering labels for interactive graph
text = paste0("DateTime: ", datetime, "\n",
"AirTemp (ºC/100): ", airtempc_100)
),
color = "pink",
alpha = 0.4) +
#streamflow data
geom_line(data = all_streamflow,
aes(x = datetime,
y = stream_height_ft,
group = 1,
#create hovering labels for interactive graph
text = paste0("DateTime: ", datetime, "\n",
"Stream Height (ft): ", round(stream_height_ft, digits = 3))
),
color = "blue",
size = 0.75) +
#manual check points
geom_point(data = mc_clean,
aes(x = datetime,
y = stripchart_stage,
group = 1,
#create hovering labels for interactive graph
text = paste0("DateTime: ", datetime, "\n",
"Manual Stream Height Check (ft): ", stripchart_stage)
),
size = 0.5) +
theme_classic() +
labs(x = "Time",
y = " ",
title = paste0("S2 Bog Streamflow and Air Temperature (", min_year, "-", max_year, ")"),
subtitle = "Air temperature is plotted in pink. \n Streamflow is plotted in blue. \n Manual streamflow checkpoints are plotted as black dots.") +
theme(plot.title = element_text(hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5,
size = 7)) +
scale_y_continuous(
# Features of the first axis
name = "Air Temperature / 100 (ºC)",
# Add a second axis and specify its features
sec.axis = sec_axis(trans = ~.*trans_value, name = "Stream Height (ft)")
)
#interactive plot
ggplotly(p_air,
tooltip = "text") %>%
layout(title = list(text = paste0(paste0("S2 Bog Streamflow and Air Temperature (", min_year, "-", max_year, ")"),
'<br>',
'<sup>',
paste0(" "),
'</sup>')),
font = list(size = 12)
)
For interactive plots,
air temperature (ºC / 100) is plotted as a pink line,
cumulative daily precipitation (in / 10) is plotted as grey bars,
streamflow (ft) is plotted as a blue line,
and streamflow manual checkpoints (ft) are plotted as black dots.
#plot
p_all <- ggplot() +
#airtemp data
geom_line(data = airtemp_join,
aes(x = datetime,
y = airtempc_100,
group = 1,
#create hovering labels for interactive graph
text = paste0("DateTime: ", datetime, "\n",
"AirTemp (ºC/100): ", airtempc_100)
),
color = "pink",
alpha = 0.4) +
#streamflow data
geom_line(data = all_streamflow,
aes(x = datetime,
y = stream_height_ft,
group = 1,
#create hovering labels for interactive graph
text = paste0("DateTime: ", datetime, "\n",
"Stream Height (ft): ", round(stream_height_ft, digits = 3))
),
color = "blue",
size = 0.75) +
#manual check points
geom_point(data = mc_clean,
aes(x = datetime,
y = stripchart_stage,
group = 1,
#create hovering labels for interactive graph
text = paste0("DateTime: ", datetime, "\n",
"Manual Stream Height Check (ft): ", stripchart_stage)
),
size = 0.5) +
#daily precipitation data
geom_col(data = precip_daily_join,
aes(x = datetime,
y = precip_10_in,
group = 1,
text = paste0("Date: ", date, "\n",
"Daily Cumulative Precipitation (in/10): ", precip_10_in)),
colour = I("grey"),
size = 0.25) +
theme_classic() +
labs(x = "Time",
y = " ",
title = paste0("S2 Bog Streamflow, Air Temperature, \n and Daily Cumulative Precipitation (", min_year, "-", max_year, ")"),
subtitle = "Air temperature is plotted in pink and scaled by 100.
Precipitation is plotted as grey bars and scaled by 10.
Streamflow is plotted in blue.
Manual streamflow checkpoints are plotted as black dots.") +
theme(plot.title = element_text(hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5,
size = 7),
legend.position = "none")
#interactive plot
ggplotly(p_all,
tooltip = "text") %>%
layout(title = list(text = paste0(paste0("S2 Bog Streamflow, Air Temperature, \n and Daily Cumulative Precipitation (", min_year, "-", max_year, ")"),
'<br>',
'<sup>',
paste0(""),
'</sup>')),
font = list(size = 12)
)
Note that this file is being knit as index.html
into the air_comparisons
repository in order to update the GitHub pages
website, where the plots can be viewed online.